package server.model.remotes;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Date;

import server.model.meeting.Group;
import server.model.meeting.MeetingInfo;
import server.model.meeting.Participant;
import server.model.meeting.UserInfo;
import server.model.remotes.IMeeting;
import server.model.meeting.Announcement;

/**
 * IMeetingService.java (server.model.remotes) extends Remote;
 * Interface van MeetingService.java (server.model.administration);
 */
public interface IMeetingService extends Remote{

	/**
	 * Vraag de info van alle geplande vergaderingen op;
	 * @return De info van alle geplande vergaderingen;
	 * @throws RemoteException
	 */
	public MeetingInfo[] getMeetingsInfo()throws RemoteException;

	/**
	 * Neem deel aan een vergadering;
	 * @param name : De naam van de vergadering;
	 * @return
	 * @throws RemoteException
	 */
	public IMeeting attendMeeting(String userName, String meetingName) throws RemoteException;
	
	/**
	 * Een nieuwe vergadering aanmaken;
	 * @param name : De naam van de vergadering;
	 * @param openMeeting : True -> De vergadering is toegankelijk voor iedereen; False -> Alleen voor de uitgenodigde leden;
	 * @param chairman : De voorzitter;
	 * @param date : De starttijd;
	 * @param date2 : De eindtijd;
	 * @param participants : De uitgenodigde leden;
	 * @return
	 * @throws RemoteException
	 */
	public boolean addMeeting(String name, boolean openMeeting, String chairman, Date date, Date date2, String[] participants) throws RemoteException;

	/**
	 * Een lijst van alle announcements ophalen;
	 * @return Een arraylist van alle announcements;
	 * @throws RemoteException
	 */
	public  ArrayList<Announcement> getAnnouncements()throws RemoteException;

	/**
	 * Een announcement toevoegen;
	 * @param announcement
	 * @throws RemoteException
	 */
	public void addAnnouncement(Announcement announcement) throws RemoteException;
	
	public ArrayList<Participant> addParticipants(Participant participant)throws RemoteException;
}